/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
*/
package net.redxyz.repost.resource.action;

import net.redxyz.repost.resource.SessionUser;
import net.redxyz.repost.service.dao.UserDao;
import net.redxyz.top.TaobaoService;
import net.redxyz.top.dbo.user.User;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.HttpSession;
import org.zhiqim.httpd.context.core.Action;
import org.zhiqim.kernel.Global;
import org.zhiqim.kernel.util.Validates;
import org.zhiqim.manager.ZmrSessionUser;

/**
 * 管理员登录，从后面管理台登录
 *
 * @version v7.0.1 @author zouzhigang 2021-7-30 新建与整理
 */
public class LoginAdminAction implements Action
{
    private String fuwuUrl = TaobaoService.getFuwuUrl(Global.getString("taobao", "articleCode"));
    
    public void execute(HttpRequest request) throws Exception
    {
        //从管理后台传入nick和sessionId
        String nick = request.getParameter("nick");
        String sessionId = request.getParameter("sessionId");
        
        int loginSrc = request.getParameterInt("loginSrc", 0);//0,1,2 对应web pc mobile三种 默认为web
        if (Validates.isEmpty(nick) || Validates.isEmpty(sessionId))
        {
            request.setRedirect(fuwuUrl, "未获取到登录数据");
            return;
        }
       
        //判断是否是管理后台的session，并且用户IP地址要和session中的IP地址一致
        HttpSession session = request.getContext().getServer().getContext(null, "/admin").getSessionManager().getSession(sessionId);
        String error = null;
        if(session == null)
            error = "您尚未登录管理台，或者会话已过期";
        
        if(error == null && session.getSessionUser(ZmrSessionUser.class) == null)
            error = "管理台session信息不存在，或者会话已过期";
        
        // 去除这个限制 应为在容器集群里面 不保持会话
//        if(error == null &&!request.getRemoteAddr().equals(session.getUserIp()))
//            error = "管理台session ip 和请求不一致";
        
        
        if(error != null)
        {
            request.setRedirect(fuwuUrl, error);
            return;
        }
        
        User user = UserDao.getUser(nick);
        if (user == null)
        {
            request.setRedirect(fuwuUrl, "用户未订购服务或者未授权登录");
            return;
        }
        
        SessionUser sessionUser = new SessionUser();
        sessionUser.setUser(user);
        sessionUser.setAdmin(true);//判断是否管理员操作
        sessionUser.setFrom(loginSrc);
        request.bindSessionUser(sessionUser);
        
        //检查赠送
        LoginAction.chkGift(sessionUser, nick, user.getVersionNo());
        
        if(loginSrc == 1)
            request.forwardTo("/pc.htm");
        else
            request.forwardTo("/web.htm");
    }
}
